#include "GameObjectManager.h"
#include <iostream>


// template<typename T, typename... Args>
// std::shared_ptr<T> GameObjectManager::GetEntity(Args&&... args) {
//     for (auto& entity : entities_) {
//         if (!entity.inUse) {
//             entity.inUse = true;
//             return std::static_pointer_cast<T>(entity.obj);
//         }
//     }

//     auto newObj = std::make_shared<T>(std::forward<Args>(args)...);
//     entities_.emplace_back(newObj, true);
//     return newObj;
// }

// template<typename T>
// void GameObjectManager::ReturnEntity(std::shared_ptr<T> entity) {
//     for (auto& pooledEntity : entities_) {
//         if (pooledEntity.obj == entity) {
//             pooledEntity.inUse = false;
//             break;
//         }
//     }
// }

// // 实例化模板函数，确保在使用时不会出现链接错误
// template std::shared_ptr<Scene> GameObjectManager::GetEntity<Scene>();
// template std::shared_ptr<Item> GameObjectManager::GetEntity<Item>();
// template std::shared_ptr<Character> GameObjectManager::GetEntity<Character>();
// template void GameObjectManager::ReturnEntity<Scene>(std::shared_ptr<Scene> entity);
// template void GameObjectManager::ReturnEntity<Item>(std::shared_ptr<Item> entity);
// template void GameObjectManager::ReturnEntity<Character>(std::shared_ptr<Character> entity);
